home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / ABUSESRC.ZIP / AbuseSrc / macabuse / imlib / packet.c < prev    next >
C/C++ Source or Header  |  1997-05-20  |  2KB  |  115 lines

  1. #include "packet.hpp"
  2. #include "jmalloc.hpp"
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6.  
  7. int packet::advance(long offset)
  8. {
  9.   ro+=offset;
  10.   return ro<=rend;
  11. }
  12.  
  13. void packet::write_long(ulong x)
  14. {
  15.   x=lltl(x);
  16.   write((uchar *)&x,4);
  17. }
  18.  
  19. void packet::write_short(ushort x)
  20. {
  21.   x=lstl(x);
  22.   write((uchar *)&x,2);
  23. }
  24.  
  25. void packet::write_byte(uchar x)
  26. {
  27.   write(&x,1);
  28. }
  29.  
  30. packet::~packet()
  31. { jfree(buf); }
  32.  
  33. packet::packet(int prefix_size) 
  34.   pre_size=prefix_size;
  35.  
  36. #ifdef MANAGE_MEM
  37.   int sp=alloc_space;
  38.   alloc_space=ALLOC_SPACE_STATIC;
  39. #endif
  40.  
  41.   buf_size=1000;
  42.   buf=(uchar *)jmalloc(buf_size,"packet buffer");
  43.   reset(); 
  44.  
  45. #ifdef MANAGE_MEM
  46.   alloc_space=sp;
  47. #endif
  48. }
  49.  
  50. void packet::get_string(char *st, int len)
  51. {
  52.   char *b=(char *)buf+ro;
  53.   while (len>1 && !eop() && *b)
  54.   {
  55.     *st=*b; 
  56.     st++;
  57.     ro++;
  58.     b++;
  59.     len--;
  60.   }
  61.   if (*b==0) ro++;
  62.   *st=0;
  63. }
  64.  
  65. void packet::reset() 
  66. { ro=wo=rend=pre_size; }
  67.  
  68. void packet::make_bigger(int max)
  69. {
  70.   if (buf_size<max)
  71.   {
  72.     buf_size=max;
  73.     buf=(uchar *)jrealloc(buf,max,"packet buffer"); 
  74.   }
  75. }
  76.  
  77. int packet::read(uchar *buffer, int size)
  78. {
  79.   if (size>rend-ro)
  80.     size=rend-ro;
  81.  
  82.   if (size>0)
  83.   {
  84.     memcpy(buffer,buf+ro,size);
  85.     ro+=size;
  86.     return size;
  87.   } else return 0;
  88. }
  89.  
  90.  
  91. int packet::write(uchar *buffer, int size)
  92. {
  93.   if (size>buf_size-wo)
  94.     make_bigger(wo+size);
  95.   if (size>0)
  96.   {
  97.     memcpy(buf+wo,buffer,size);
  98.     wo+=size;
  99.     rend=wo;
  100.     return size;
  101.   }
  102.   return 0;
  103. }
  104.  
  105.  
  106.  
  107. void packet::insert_into(packet &pk)
  108. {
  109.   pk.write(buf+pre_size,rend-pre_size);
  110. }
  111.  
  112.  
  113.  
  114.